<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include_once 'principal.php';

/**
 * Controller para ações de Editora
 * @author Douglas Rafael
 * @package controllers
 */
class Editora extends Principal {

    public function __construct() {
        parent::__construct();
        //Verifica se o usuário estar logado no sistema
        $this->_verificaLogado();
        
        $this->config->load('pagination');
        $this->title = 'Cadastro de Editora || ' . $this->title;
        $this->title_page = 'Cadastro de Editora';
        $this->message_geral = '<h2 class="title-alert">informações gerais</h2>
                        <p>Não é permitido cadastros duplicados de <b>EDITORAS</b>, então verifique se o autor a ser inserido não possui cadastrado.</p>
                        <p><b>Só é possível apagar uma EDITORA se ele não estiver relacionada com um item (Livro, magazine...).</b></p>
                        <p><b>ALT + N</b> Abre o formulário para cadastrar uma nova Editora.</p>
                        <p><b>ESC</b> Fecha o formulário.</p>
                        <p>Duplo clique no <b>nome</b> da editora abre o formulário para edição do registro.</p>';
    }

    public function index() {
        $this->listar();
    }

    /**
     * Método para Carregar a view com a lista de <b>editoras</b>,
     */
    public function listar() {
        try {
            $this->_verificaPermissao( ControleAcesso::CONSULTAR_EDITORA );
            
            // Removendo a variavel 'searchterm' da sessão
            $this->session->unset_userdata('searchterm');

            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_pagina = $this->config->item('per_page');
            $editoras = $this->facade->selectEditoras($init, $total_pagina);
            $total_rows = $this->facade->quantEditora();

            // paginação
            $config['base_url'] = base_url() . "editora/listar";
            $config['total_rows'] = $total_rows;
            $this->pagination->initialize($config);

            $data['total_rows'] = $config['total_rows'];
            $data['pagination'] = $this->pagination->create_links();
            $data['editoras'] = $editoras;

            $this->load->view('editora_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

    public function cadastrar() {
        try {
            $this->_verificaPermissao( ControleAcesso::CADASTRAR_EDITORA );
            
            $this->load->library('form_validation');

            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[3]|xss_clean");
            $this->form_validation->set_rules("telefone", "Telefone", "trim|exact_length[15]|xss_clean");
            $this->form_validation->set_rules("email", "E-Mail", "trim|valid_email|xss_clean");
            $this->form_validation->set_rules("site", "Site", "trim|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->insertEditora();

                Mensagem::setMensagemSucesso("Editora<b> " . $this->input->post('nome') . "</b> cadastrada com sucesso.");
                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    public function atualizar() {
        try {
            $this->_verificaPermissao( ControleAcesso::ATUALIZAR_EDITORA );
            
            $this->load->library('form_validation');

            $this->form_validation->set_rules("nomeUp", "Nome", "trim|required|min_length[3]|xss_clean");
            $this->form_validation->set_rules("telefoneUp", "Telefone", "trim|exact_length[15]|xss_clean");
            $this->form_validation->set_rules("emailUp", "E-Mail", "trim|valid_email|xss_clean");
            $this->form_validation->set_rules("siteUp", "Site", "trim|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->updateEditora();

                Mensagem::setMensagemSucesso("Editora<b> " . $this->input->post('nomeUp') . "</b> atualizada com sucesso.");
                $this->session->userdata('searchterm') ?  $this->buscar() :  $this->listar(); 
            }

        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    public function excluir() {
        try {
            $this->_verificaPermissao( ControleAcesso::EXCLUIR_EDITORA );
            
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigo", "Código", "trim|required|xss_clean");
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[3]|xss_clean");
            
            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->deleteEditora();

                Mensagem::setMensagemSucesso("Editora(s) excluída com sucesso.");

                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    public function buscar() {
        try {
            $searchterm = $this->facade->searchtermHandler($this->input->get_post('term', TRUE));
            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_rows = $this->facade->quantSearchEditora($searchterm);
            $total_pagina = $this->config->item('per_page');
            $editoras = $this->facade->searchEditora($init, $total_pagina, $searchterm);

            //paginação
            $config['base_url'] = base_url() . "editora/buscar";
            $config['total_rows'] = $total_rows;
            $this->pagination->initialize($config);

            $data['total_rows'] = $config['total_rows'];
            $data['pagination'] = $this->pagination->create_links();
            $data['editoras'] = $editoras;

            if ($total_rows == 0)
                Mensagem::setMensagem("Nenhum registro foi encontrado para essa pesquisa: <b> $searchterm </b>", "aviso");

            $this->load->view('editora_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

}